package com.syx.client.service;

import com.syx.common.Message;
import com.syx.common.MessageType;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.Socket;
import java.sql.SQLOutput;

/**
 * @author 邵一鑫
 * @date 2024/1/13 22:05
 * 线程持有 socket，保持 client 和 server 的连接
 */
public class ClientConnectServerThread extends Thread{

    private Socket socket = null;

    public ClientConnectServerThread() {}

    public ClientConnectServerThread(Socket socket) {
        this.socket = socket;
    }


    @Override
    public void run() {

        while (true) {
            try {
                // 得到 ObjectInputStream
                ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
                // 如果服务器没有发送 message 对象，线程会阻塞在这里
                Message message = (Message) ois.readObject();
                switch (message.getMesType()) {
                    // 得到在线用户列表
                    case MessageType.MESSAGE_RET_ONLINE_FRIEND:
                        System.out.println("==============当前在线用户列表==============");
                        String[] onlineUser = message.getContent().split(" ");
                        for (int i = 0; i < onlineUser.length; i++) {
                            System.out.println("用户：" + onlineUser[i]);
                        }
                        break;
                    // 获取私聊信息
                    case MessageType.MESSAGE_COMM_MES:
                        System.out.println(message.getContent());
                        break;
                    // 获得文件
                    case MessageType.MESSAGE_FILE:
                        byte[] fileBytes = message.getFileBytes();
                        String dest = message.getDest();
                        // 保存文件
                        FileOutputStream fos = new FileOutputStream(new File(dest));
                        fos.write(fileBytes);
                        System.out.println("接收文件 ok");
                        break;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public Socket getSocket() {
        return socket;
    }

}
